/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tictactoe;
/**
 *
 * @author renew
 */
public class ai {
    
    static boolean invincible = true;

    static void move(){
        for (int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                if (Main.Feld[i][j]==null) {
                    if (win(i, j)) return;
                }
            }
        }
        for (int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                if (Main.Feld[i][j]==null){
                    if(block(i,j)) return;
                }
            }
        }

        if (invincible){
            if (Main.Feld[1][1]==null) {
                Main.action(1,1);
                return;
            }
            if (Main.Feld[1][1]!=null && Main.count == 1){
                Main.action(0, 0);
                return;
            }
            if (Main.Feld[0][0]!=null && Main.Feld[2][2]!=null && Main.count==3){
                if (Main.Feld[0][0].cross!=Main.turn && Main.Feld[2][2].cross!=Main.turn) Main.action(1, 0);
                else Main.action(2, 0);
                return;
            }
            if (Main.Feld[2][0]!=null && Main.Feld[0][2]!=null && Main.count==3){
                if (Main.Feld[2][0].cross!=Main.turn && Main.Feld[0][2].cross!=Main.turn) Main.action(1, 0);
                else Main.action(0, 0);
                return;
            }
            
            if (Main.count==3 && cornercount()==0){
                if (Main.Feld[1][0]!=null && Main.Feld[0][1]!=null){
                    Main.action(0, 0);
                    return;
                }
                if (Main.Feld[1][0]!=null && Main.Feld[2][1]!=null){
                    Main.action(2, 0);
                    return;
                }
                if (Main.Feld[1][2]!=null && Main.Feld[0][1]!=null){
                    Main.action(0, 2);
                    return;
                }
                if (Main.Feld[1][2]!=null && Main.Feld[2][1]!=null){
                    Main.action(2, 2);
                    return;
                }
                Main.action(0, 0);
                return;
            }

            if (cornercount()==1){
                if (Main.Feld[0][2]!=null){
                    Main.action(2, 0);
                    return;
                }
                if (Main.Feld[0][0]!=null){
                    Main.action(2, 2);
                    return;
                }
                if (Main.Feld[2][0]!=null){
                    Main.action(0, 2);
                    return;
                }
                if (Main.Feld[2][2]!=null){
                    Main.action(0, 0);
                    return;
                }
            }

            //Wenn alles nicht hilft, den erstbesten
            //, denn dann ist es egal!!
            for (int i=0;i<3;i++){
                for (int j=0;j<3;j++){
                    if(Main.Feld[i][j]==null){
                        Main.action(i, j);
                        return;
                    }
                }
            }
        }
    }

    static int cornercount(){
        int i=0;
        if (Main.Feld[0][0]!=null) i++;
        if (Main.Feld[2][0]!=null) i++;
        if (Main.Feld[0][2]!=null) i++;
        if (Main.Feld[2][2]!=null) i++;
        return i;
    }

    static boolean win(int x, int y){
        Main.Feld[x][y] = new Element(Main.turn);
        if (Main.checkH()|Main.checkV()|Main.checkD()){
            Main.Feld[x][y] = null;
            Main.action(x, y);
            return true;
        }
        Main.Feld[x][y] = null;
        return false;
    }

    static boolean block(int x, int y){
        Main.Feld[x][y] = new Element(!Main.turn);
        if (Main.checkH()|Main.checkV()|Main.checkD()){
            Main.Feld[x][y] = null;
            Main.action(x, y);
            return true;
        }
        Main.Feld[x][y] = null;
        return false;
    }
}
